Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Оцінювання якості генераторів псевдовипадкових чисел

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
Моделювання систем

Частина тексту файла

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ,,ЛЬВІВСЬКА ПОЛІТЕХНІКА’’ Кафедра ІСМ  Лабораторна робота № 2 з дисципліни “Моделювання систем” на тему “Оцінювання якості генераторів псевдовипадкових чисел” Львів-2013 Мета роботи Вивчення критеріїв якості генераторів випадкових чисел та програмна реалізація оцінювання якості послідовностей псевдовипадкових чисел. Варіант завдання Варіант 17 Код основної програми #include <iostream> #include <math.h> #include <windows.h> #include <stdint.h> #include <ctime> #include <cstdlib> #include <string> #include <sstream> using namespace std; #define m 1000000 #pragma comment(linker, "/STACK:100000000") #define PI 3.14159265358979323846 double result; double XSK=0.37470302; //Х0 середніх квадратів int g=16; double XMM=28768; //Х0 мультиплікативного методу int t=162; int l=811; int Seed=8005; unsigned Array[624]; //массив ПВЧ unsigned Y; //змінна, що буде містити ПВЧ у вихорі Мерсенна int index; //індекс, який буде "бігати" по масиву double b; //ТАЙМЕР class CTimer { public: CTimer() { QueryPerformanceFrequency(&mqFreq); } ~CTimer() {} void Start() { QueryPerformanceCounter(&mqStart); } void End() { QueryPerformanceCounter(&mqEnd); } double GetTimeInSeconds() { return (mqEnd.QuadPart - mqStart.QuadPart)/static_cast<double>(mqFreq.QuadPart); } private: LARGE_INTEGER mqStart; LARGE_INTEGER mqEnd; LARGE_INTEGER mqFreq; }; //МЕТОД СЕРЕДИННИХ КВАДРАТІВ double MSK() { double temp; //тимчасова змінна double *P=0; //вказівник на ділянку пам'яті, в якій буде зберігатись ціла частина числа P=new double(sizeof(double)); //виділення пам'яті під вказівник double XSKtemp=XSK*XSK; //Х^2 XSKtemp=XSKtemp*1000000000000; //| temp=modf(XSKtemp,P); //|позбавляємось лівих бітів XSKtemp=*P; //| XSKtemp=XSKtemp/100000000; //| temp=modf(XSKtemp,P); //|позбавляємось правих бітів XSKtemp=temp; XSK=XSKtemp; //змінюю значення Х0 delete P; return XSKtemp; } //МУЛЬТИПЛІКАТИВНИЙ МЕТОД double Multiplicative_Method() { uint16_t X1=XMM*l; //беремо 16 молодших бітів числа XMM=X1; //змінюю значення Х0 result=X1; result/=65536; //переводжу випадкове чесле до інтервалу (0,1) return result; } double Mersenns_Whirl() { Y=Array[index]; //| Y=Y^(Y>>11); //| Y=Y^((Y<<7)&(2636928640)); //| генерація ПВЧ Y=Y^((Y<<15)&(4022730752)); //| Y=Y^(Y>>18); //| index++; result=Y; result/=4294967296; if(index>=624) { for(int j=0;j<624;j++) //генерація нових чисел для масиву { unsigned Z=(Array[j]&(0x80000000))+((Array[(j+1)%624])&(0x7FFFFFFF)); if((Z%2)==0) { Array[j]=Array[(j+397)%624]^(Z>>1); } else { Array[j]=Array[(j+397)%624]^(Z>>1)^(2567483615); } } index=0; //повертаємось до початку масиву } return result; } double Random() { double RandDigit; RandDigit=rand()/(double)RAND_MAX; return RandDigit; } double Gistogram(double Digits_Array[], int intervals) { double deviation=0; double Array1[10]; double Array2[100]; double Array3[1000]; double PVCh10; if(intervals==10) { for(int i=0; i<10; i++) Array1[i]=0; for(int i=0; i<m; i++) { PVCh10=Digits_Array[i]*10; int flag=PVCh10; //flag містить номер інтервалу, у який попало число *(Array1+flag)=*(Array1+flag)+1; } /*for(int i=0; i<10; i++) cout<<Array1[i]<<endl; */ //кількість чисел в кожному інтервалі for(int i=0; i<intervals; i++) Array1[i]-=100000; for(int i=0; i<intervals; i++) Array1[i]*=Array1[i]; for(int i=0; i<intervals; i++) deviation+=Array1[i]; deviation/=intervals; } ///////////////////////////////////////////////////////////// if(intervals==100) { for(int i=0; i<100; i++) Ar...
Антиботан аватар за замовчуванням

08.04.2014 00:04

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини